#pragma once
#include <memory>
#include <uv.h>

#include "RTPDecoderHandle.hpp"
#include "RtpPacket.hpp"
/*
 * 本程序假设RTP使用TCP传输，可以不考虑丢包，乱序问题。
*/
class StreamHelper;
class RtpDecoder {
public:
	RtpDecoder();
	~RtpDecoder();
	bool Start(Hi::RTPDecoderHandle& handle, uint32_t width, uint32_t height, void* option);
	void OnRtpPacket(Hi::RtpPacket *rtpPacket);
	void Stop();
public:
	void AsyncProcess();
	void VideoProcess();
private:
	/*
	 * 如果RTPPacket来不及处理，需要调用本函数进行Clone，以便缓存，稍后处理。
	 * 此处处理涉及到大块内存申请和拷贝，所以建议轻易不要使用。
	*/
	//std::shared_ptr<RtpPacket> CloneRtpPacket(RtpPacket *rtpPacket);
private:
	uv_async_t async;
	bool closed{false};
	
	uv_thread_t videoThread;
	
	bool receivingVideo{false};
	
	StreamHelper* streamHelper{nullptr};
};